package com._54programer.ws;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com._54programer.rabbit.Send;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;

@Component
public class NSend {

	@Autowired
	private Send send;

	@Value("${ws.opencluster}")
	private boolean cluster;

	@Autowired
	private SID SSID;

	// 返回消息 个人
	public void OK(ChannelHandlerContext ctx, String message) {
		ctx.writeAndFlush(new TextWebSocketFrame(message));
	}

	// 返回消息 个人2
	public void OK(Channel channel, String message) {
		channel.writeAndFlush(new TextWebSocketFrame(message));
	}

	// 群发个某groupID -- by groupId
	public void OKby_GroupId(String groupId, String message) {
		if (cluster) {
			Message messObj = JSON.toJavaObject(JSONObject.parseObject(message), Message.class);
			messObj.setData(JSONObject.parseObject(message));
			messObj.setMessageType(Const.BY_GROUPID);
			messObj.setGroupId(groupId);
			messObj.setServerId(SSID.ID());
			// 消息发到集群
			send.sycn(JSON.toJSONString(messObj));
		}
		// 消息发到本服
		NBind.sendByGroup(groupId, message);
	}

	// 发给用户标识 username / 等可作为唯一标识
	public void OKbyGroup_UserName(String username, String message) {
		if (cluster) {
			Message messObj = JSON.toJavaObject(JSONObject.parseObject(message), Message.class);
			messObj.setData(JSONObject.parseObject(message));
			messObj.setMessageType(Const.BY_USERNAME);
			messObj.setMessageTypeParams2(username);
			messObj.setServerId(SSID.ID());// 本服ID标识
			// 消息发到集群
			send.sycn(JSON.toJSONString(messObj));
		}
		// 消息发到本服
		NBind.sendByUser(username, message);
	}

	// 发给用户标识 uid / 等可作为唯一标识
	public void OKbyGroup_Uid(String uid, String message) {
		if (cluster) {
			Message messObj = JSON.toJavaObject(JSONObject.parseObject(message), Message.class);
			messObj.setData(JSONObject.parseObject(message));
			messObj.setMessageType(Const.BY_UID);
			messObj.setMessageTypeParams2(uid);
			messObj.setServerId(SSID.ID());// 本服ID标识
			// 消息发到集群
			send.sycn(JSON.toJSONString(messObj));
		}
		// 消息发到本服
		NBind.sendByUid(uid, message);
	}

	// 广播
	public void OKby_All(String message) throws Exception {
		if (cluster) {
			Message messObj = JSON.toJavaObject(JSONObject.parseObject(message), Message.class);
			messObj.setData(JSONObject.parseObject(message));
			messObj.setMessageType(Const.BY_NONE);// 广播
			messObj.setServerId(SSID.ID());// 本服ID标识
			// 消息发到集群
			send.sycn(JSON.toJSONString(messObj));
		}
		// 消息发到本服
		NBind.sendAll(message);
	}
}
